home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / asm-m68k / motorola_pgalloc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.2 KB  |  110 lines

  1. #ifndef _MOTOROLA_PGALLOC_H
  2. #define _MOTOROLA_PGALLOC_H
  3.  
  4. #include <asm/tlb.h>
  5. #include <asm/tlbflush.h>
  6.  
  7. extern pmd_t *get_pointer_table(void);
  8. extern int free_pointer_table(pmd_t *);
  9.  
  10. static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
  11. {
  12.     pte_t *pte;
  13.  
  14.     pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
  15.     if (pte) {
  16.         __flush_page_to_ram(pte);
  17.         flush_tlb_kernel_page(pte);
  18.         nocache_page(pte);
  19.     }
  20.  
  21.     return pte;
  22. }
  23.  
  24. static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
  25. {
  26.     cache_page(pte);
  27.     free_page((unsigned long) pte);
  28. }
  29.  
  30. static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address)
  31. {
  32.     struct page *page = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0);
  33.     pte_t *pte;
  34.  
  35.     if(!page)
  36.         return NULL;
  37.  
  38.     pte = kmap(page);
  39.     if (pte) {
  40.         __flush_page_to_ram(pte);
  41.         flush_tlb_kernel_page(pte);
  42.         nocache_page(pte);
  43.     }
  44.     kunmap(pte);
  45.     pgtable_page_ctor(page);
  46.     return page;
  47. }
  48.  
  49. static inline void pte_free(struct mm_struct *mm, pgtable_t page)
  50. {
  51.     pgtable_page_dtor(page);
  52.     cache_page(kmap(page));
  53.     kunmap(page);
  54.     __free_page(page);
  55. }
  56.  
  57. static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t page)
  58. {
  59.     pgtable_page_dtor(page);
  60.     cache_page(kmap(page));
  61.     kunmap(page);
  62.     __free_page(page);
  63. }
  64.  
  65.  
  66. static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
  67. {
  68.     return get_pointer_table();
  69. }
  70.  
  71. static inline int pmd_free(struct mm_struct *mm, pmd_t *pmd)
  72. {
  73.     return free_pointer_table(pmd);
  74. }
  75.  
  76. static inline int __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd)
  77. {
  78.     return free_pointer_table(pmd);
  79. }
  80.  
  81.  
  82. static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
  83. {
  84.     pmd_free(mm, (pmd_t *)pgd);
  85. }
  86.  
  87. static inline pgd_t *pgd_alloc(struct mm_struct *mm)
  88. {
  89.     return (pgd_t *)get_pointer_table();
  90. }
  91.  
  92.  
  93. static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte)
  94. {
  95.     pmd_set(pmd, pte);
  96. }
  97.  
  98. static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, pgtable_t page)
  99. {
  100.     pmd_set(pmd, page_address(page));
  101. }
  102. #define pmd_pgtable(pmd) pmd_page(pmd)
  103.  
  104. static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
  105. {
  106.     pgd_set(pgd, pmd);
  107. }
  108.  
  109. #endif /* _MOTOROLA_PGALLOC_H */
  110.